home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1995-06-15 | 15.5 KB | 821 lines |
- ' --------------------
- ' "NIGHT MATH ATTACK"
- ' By
- ' Chris Evans
- ' 44 Shady Lane - RR7
- ' St. Thomas, ON
- ' Canada N5P 3T2
- ' --------------------
- Amos Lock
- Break Off
- Global D0PRINT
- Led Off
- Music 1
- Unpack 9 To 1
- Get Bob 1,0,0 To 50,14
- Screen Close 1
- Unpack 6 To 0
- Unpack 6 To 1
- Cls 0
- Hide On
- Screen Copy 0,0,0,319,156 To 1,0,0
- Screen To Front 1
- Screen 1
- Double Buffer
- Bob 1,-49,0,1
- Channel 1 To Bob 1
- Hide On
- Amal 1,"M 368,0,368"
- Amal On
- While Chanmv(1)
- Wend
- Bob Off
- Amal Off
- Screen Copy 0,0,157,319,199 To 1,0,157
- Wait 100
- Screen Close 1
- Copper Off
- Break Off
- 'Set up skip instructions screen.
- Screen Open 0,320,200,2,Lowres
- Curs Off
- Flash Off
- Cls 0
- Palette 0,$FFF
- Locate 0,11
- Centre "Press I for instructions"
- Cdown
- Centre "Press S to skip instructions"
- Set Rainbow 0,0,64,"","","(1,1,1)"
- Rainbow 0,56,0,255
- Channel 1 To Rainbow 0
- Amal 1,"L: M -16,0,100; M 16,0,0; J L;"
- Amal On
- Copper On
- Hide On
- Break Off
- Do
- I$=""
- While I$=""
- I$=Inkey$
- Wend
- Exit If I$="i" or I$="I"
- Exit If I$="S" or I$="s"
- Loop
- Amal Off
- If I$="S" or I$="s" Then Goto 22
- 'Start instructions
- Copper Off
- Break Off
- Rainbow Del 0
- Screen Open 0,320,220,4,Lowres
- Colour 2,$0
- Set Rainbow 0,2,223,"(1,1,0)","(1,1,0)","(1,1,0)"
- Rainbow 0,0,49,200
- NUM=182
- C0L0RRANEM=$110
- C0L0RRANE=C0L0RRANEM*15
- For T=0 To 15
- Rain(0,T)=C0L0RRANEM*T
- Next T
- For T=16 To NUM
- Rain(0,T)=C0L0RRANE
- Next T
- S=C0L0RRANE
- For T=NUM+1 To NUM+16
- Rain(0,T)=S
- S=S-C0L0RRANEM
- Next T
- Cls 0
- Curs Off
- Cls 0
- Copper On
- Hide On
- Break Off
- Restore DATLABELONE
- Do
- Read A$
- If A$="PAUSE" : D0SCROLL[12] : Clear Key : Wait Key : End If
- If A$="STOPANDASK1"
- D0SCROLL[12]
- D0PRINT=1
- Do
- I$=""
- While I$=""
- I$=Inkey$
- Wend
- If I$="n" : D0PRINT=0 : End If
- If I$="N" : D0PRINT=0 : End If
- If I$="p" : D0PRINT=-1 : End If
- If I$="P" : D0PRINT=-1 : End If
- If D0PRINT<>1 : Exit : End If
- Loop
- I$=""
- End If
- If "STOP"=Left$(A$,4) Then Exit
- If A$<>"PAUSE"
- L=Len(A$)
- L=L*8
- PLACE=160-(Int(L/2))
- Ink 2
- Gr Writing 0
- Text PLACE,210,A$
- Def Scroll 1,0,0 To 319,219,0,-1
- D0SCROLL[10]
- End If
- Loop
- D0SCROLL[220]
- Procedure D0SCROLL[HOWMANY]
- For T=1 To HOWMANY
- Scroll 1
- Wait 2
- Next T
- End Proc
- DATLABELONE:
- Data "Hello! Welcome to Night Math Attack."
- Data "","Instructions:",""
- Data "After choosing the math operation, a"
- Data "question will appear at the top of the"
- Data "screen. You must use the joystick or"
- Data "cursor keys to move the chopper up or"
- Data "down to the correct answer. Then push"
- Data "the fire button or space bar to fire a"
- Data "missile. The program will tell you"
- Data "whether it is correct or not, and it"
- Data "will give you another question. When"
- Data "you are done 20 questions you will be"
- Data "given a report card and the choice of"
- Data "doing another 20, quitting, or going"
- Data "back to the main menu.","",""
- Data "Press any key to continue.","PAUSE"
- Data "","During the Game:"
- Data "Main Menu = Esc "
- Data " Quit = Q or q"
- Data " Sound On = Left Shift Key"
- Data " Sound Off = Right Shift Key"
- Data "","Hold either shift key down until the"
- Data "correct message appears on the bottom"
- Data "line.","","","","","","","",""
- Data "Press any key to continue.","PAUSE"
- Data "","You can set the game to immediately"
- Data "print out any wrongly answered questions"
- Data "& 'out of time' questions, so that a"
- Data "list can be made of these difficult"
- Data "questions. If you choose this print-out"
- Data "feature & your printer is not connected"
- Data "or off line, the game will freeze until"
- Data "the printer is on-line.","","","","","","","",""
- Data "Press P to print errors"
- Data "Press N for no print-out"
- Data "STOPANDASK1"
- 'End instructions
- 22 Copper Off
- Break Off
- Rainbow Del 0
- Unpack 8 To 0
- Get Bob 1,0,0 To 48,19
- Get Bob 2,0,20 To 48,39
- Get Bob 3,0,40 To 48,59
- Unpack 7 To 0
- Copper On
- Hide On
- Break Off
- Key Speed 1,10
- KINDOFQUES$=""
- Do
- I$=""
- While I$=""
- I$=Inkey$
- Wend
- If I$="1" : KINDOFQUES$="A" : Exit : End If
- If I$="2" : KINDOFQUES$="S" : Exit : End If
- If I$="3" : KINDOFQUES$="M" : Exit : End If
- If I$="4" : KINDOFQUES$="D" : Exit : End If
- Loop
- Ink 0
- I=Val(I$)
- Set Rainbow 0,I,64,"(1,1,1)","",""
- Rainbow 0,56,0,255
- Channel 1 To Rainbow 0
- Amal 1,"L: M -16,0,100 M 16,0,0 J L"
- Amal On
- Wait 250
- Amal Off
- Default
- Rainbow Del 0
- Screen Close 0
- 23 Copper Off
- Break Off
- Unpack 8 To 1
- Screen Open 0,320,126,32,Lowres
- Curs Off
- Flash Off
- Fade 1 To 1
- Wait 15
- Set Rainbow 0,0,50,"","","(1,1,1)"
- Rainbow 0,0,145,33
- For T=0 To 15
- U=15-T
- Rain(0,T+16)=((T*256))+(T*16)+U
- Next T
- Screen Open 1,320,84,8,Lowres
- Curs Off
- Paper 0
- Pen 6
- Cls 0
- Unpack 10 To 3
- Screen Display 3,,40,,
- Shift Up 1,8,15,1
- Screen Open 2,320,16,2,Lowres
- Screen 2
- Curs Off
- Paper 0
- Cls 0
- Colour 1,$FFF
- Screen Display 2,,244,,
- Screen 0
- Screen To Front 2
- Screen To Front 0
- Double Buffer
- Autoback 0
- Screen Swap
- Screen To Front 2
- SOUND$="YES"
- Home
- X Mouse=258
- Y Mouse=242
- X=130
- Y=60
- Bob 1,X,Y,1
- AASKED=0
- Gosub NEWQSTN
- Timer=0
- FAR=0
- If D0PRINT Then Lprint "OOT=Out Of Time"
- USEBOB=1
- Music 1
- Copper On
- Break Off
- FIRD=False
- Do
- Add USEBOB,1,1 To 3
- Bob 1,X,Y,USEBOB
- Wait Vbl
- Cls 0
- Bob Draw
- Screen Swap
- Cls 0
- Bob Draw
- Screen Swap
- I$=Inkey$
- S=Scancode
- If S=76
- If Y>7
- Add Y,-2
- End If
- If Not Y>7
- Y=7
- End If
- End If
- If S=77
- If Y<106
- Add Y,2
- End If
- If Not Y<106
- Y=106
- End If
- End If
- If I$=" "
- Bob 9,X Bob(1)-1,Y Bob(1)+14,9
- FIRD=True
- End If
- If S=69
- Screen Close 1
- Screen Close 2
- Goto 22
- End If
- S=0
- If I$="Q" Then Goto NEXIT
- If I$="q" Then Goto NEXIT
- If Key Shift=1
- SOUND$="YES"
- Screen 2
- Cls 0
- Locate 0,0
- Print "Sound On Qu. #"+Str$(AASKED);
- Screen 0
- Led Off
- Music 1
- End If
- If Key Shift=2
- SOUND$="NO"
- Screen 2
- Cls 0
- Locate 0,0
- Print "Sound Off Qu. #"+Str$(AASKED);
- Screen 0
- Music Off
- End If
- If Jup(1)
- If Y>7
- Add Y,-2
- End If
- If Not Y>7
- Y=7
- End If
- End If
- If Jdown(1)
- If Y<106
- Add Y,2
- End If
- If Not Y<106
- Y=106
- End If
- End If
- If Fire(1)
- Bob 9,X Bob(1)-1,Y Bob(1)+14,9
- FIRD=True
- End If
- If FIRD
- If X Bob(9)>1
- Bob 9,X Bob(9)-6,Y Bob(9),9
- If Bob Col(9,5 To 5)
- If SOUND$="YES"
- Boom
- End If
- Gosub FI
- End If
- If Bob Col(9,6 To 6)
- If SOUND$="YES"
- Boom
- End If
- Gosub SE
- End If
- If Bob Col(9,7 To 7)
- If SOUND$="YES"
- Boom
- End If
- Gosub TH
- End If
- If Bob Col(9,8 To 8)
- If SOUND$="YES"
- Boom
- End If
- Gosub FO
- End If
- Else
- Bob Off 9
- FIRD=False
- End If
- End If
- If AASKED>20
- Goto HOWDID
- End If
- If Timer>=1100
- If AASKED<21
- WRONG=WRONG+1
- Screen Open 4,320,200,2,Lowres
- Colour 0,$0
- Colour 1,$F00
- Locate 0,12
- Pen 1
- Paper 0
- CENTE["Out of Time!"]
- ANS[KINDOFQUES$,FIRST,SECOND,ANSWER,300]
- Curs Off
- Wait 300
- Bob Off 9
- FIRD=False
- Screen Close 4
- Cls 0
- Bob Draw
- Screen Swap
- Cls 0
- Bob Draw
- Screen Swap
- Gosub NEWQSTN
- Timer=0
- X=130
- Y=60
- End If
- End If
- Loop
- Proc XIT[SOUND$,CORRECT,WRONG]
- NEWQSTN:
- Copper Off
- Screen 0
- Cls 0
- Screen Swap
- Cls 0
- Screen Swap
- AASKED=AASKED+1
- Screen To Front 2
- Screen 0
- If SOUND$="YES"
- Screen 2
- Cls 0
- Locate 0,0
- If AASKED<>0
- Print "Sound On Qu. #"+Str$(AASKED);
- End If
- If AASKED=0
- Print "Sound On Qu. #"+Str$(1);
- End If
- Screen 0
- End If
- If SOUND$="NO"
- Screen 2
- Cls 0
- Locate 0,0
- If AASKED<>0
- Print "Sound Off Qu. #"+Str$(AASKED);
- End If
- If AASKED=0
- Print "Sound Off Qu. #"+Str$(1);
- End If
- Screen 0
- End If
- Screen 1
- Cls 0
- Locate 0,2
- FIRST=0
- SECOND=0
- ANSWER=0
- FT=0
- SD=0
- AR=0
- BB=0
- CC=0
- DD=0
- If KINDOFQUES$="A"
- FIRST=Rnd(99)
- SECOND=Rnd(8)
- SECOND=SECOND+1
- Centre Str$(FIRST)+" + "+Str$(SECOND)+" ="
- ANSWER=FIRST+SECOND
- End If
- If KINDOFQUES$="S"
- FIRST=Rnd(89)
- SECOND=Rnd(8)
- FIRST=FIRST+10
- SECOND=SECOND+1
- Centre Str$(FIRST)+" - "+Str$(SECOND)+" ="
- ANSWER=FIRST-SECOND
- End If
- If KINDOFQUES$="M"
- FIRST=Rnd(12)
- SECOND=Rnd(12)
- Centre Str$(FIRST)+" X "+Str$(SECOND)+" ="
- ANSWER=FIRST*SECOND
- End If
- If KINDOFQUES$="D"
- FT=Rnd(9)
- SD=Rnd(9)
- Inc FT
- Inc SD
- AR=FT*SD
- FIRST=AR
- SECOND=FT
- ANSWER=SD
- DIV$=" "+Chr$(247)+" "
- Centre Str$(FIRST)+DIV$+Str$(SECOND)+" ="
- End If
- Cdown
- Cline
- 2 NUMBER=Rnd(3)
- If KINDOFQUES$="A"
- BB=FIRST+(Rnd(8)+1)
- CC=FIRST+(Rnd(8)+1)
- DD=FIRST+(Rnd(8)+1)
- End If
- If KINDOFQUES$="S"
- BB=FIRST-(Rnd(8)+1)
- CC=FIRST-(Rnd(8)+1)
- DD=FIRST-(Rnd(8)+1)
- End If
- If KINDOFQUES$="M"
- BB=Rnd(144)
- CC=Rnd(144)
- DD=Rnd(144)
- End If
- If KINDOFQUES$="D"
- BB=Rnd(9)
- CC=Rnd(9)
- DD=Rnd(9)
- BB=BB+1
- CC=CC+1
- DD=DD+1
- End If
- If ANSWER=BB Then Goto 2
- If ANSWER=CC Then Goto 2
- If ANSWER=DD Then Goto 2
- If BB=CC Then Goto 2
- If BB=DD Then Goto 2
- If CC=DD Then Goto 2
- If NUMBER=0
- Locate 0,3 : Print ANSWER
- Locate 0,5 : Print BB
- Locate 0,7 : Print CC
- Locate 0,9 : Print DD
- End If
- If NUMBER=1
- Locate 0,3 : Print BB
- Locate 0,5 : Print ANSWER
- Locate 0,7 : Print CC
- Locate 0,9 : Print DD
- End If
- If NUMBER=2
- Locate 0,3 : Print BB
- Locate 0,5 : Print CC
- Locate 0,7 : Print ANSWER
- Locate 0,9 : Print DD
- End If
- If NUMBER=3
- Locate 0,3 : Print BB
- Locate 0,5 : Print CC
- Locate 0,7 : Print DD
- Locate 0,9 : Print ANSWER
- End If
- Ink 6
- Box 104,6 To 216,16
- Screen 0
- Bob Draw
- X=130
- Y=60
- Bob 1,X,Y,1
- Screen To Front 2
- Screen 0
- Get Bob 1,4,103,5 To 217,17
- Get Bob 1,5,5,15 To 33,24
- Get Bob 1,6,5,31 To 33,40
- Get Bob 1,7,5,47 To 33,56
- Get Bob 1,8,5,63 To 33,72
- Cls 0
- Bob 4,103,6,4
- Bob 5,0,32,5
- Bob 6,0,55,6
- Bob 7,0,78,7
- Bob 8,0,101,8
- Screen Swap
- Bob Clear
- Cls 0
- Bob Draw
- Screen Swap
- Bob Clear
- Cls 0
- Bob Draw
- Copper On
- Hide On
- Timer=0
- Return
- HOWDID:
- Key Speed 10,2
- Clear Key
- Screen Close 0
- Screen Open 0,320,200,32,Lowres
- Curs Off
- Cls 0
- Home
- Pen 31
- Paper 0
- If CORRECT<>1
- CENTE["You got"+Str$(CORRECT)+" questions right."]
- Else
- CENTE["You got"+Str$(CORRECT)+" question right."]
- End If
- If WRONG<>1
- CENTE["You got"+Str$(WRONG)+" questions wrong."]
- Else
- CENTE["You got"+Str$(WRONG)+" question wrong."]
- End If
- CENTE["Your percent of questions right is"]
- CENTE[Str$(CORRECT*5)+"."]
- CENTE["Your percent of questions wrong is"]
- CENTE[Str$(WRONG*5)+"."]
- Print " C key = Continue"
- Print " Q key = Quit"
- Print "Esc key = Main menu"
- AASKED=0
- 1 I$=""
- While I$=""
- I$=Inkey$
- Wend
- If Scancode=69
- Screen Close 0
- Screen Close 1
- Screen Close 2
- Goto 22
- End If
- If I$="C" Then Goto 3
- If I$="c" Then Goto 3
- If I$="Q" Then Proc XIT[SOUND$,CORRECT,WRONG]
- If I$="q" Then Proc XIT[SOUND$,CORRECT,WRONG]
- Goto 1
- 3 CORRECT=0
- WRONG=0
- AASKED=0
- Screen Close 0
- Screen Close 1
- Screen Close 2
- Key Speed 0,1
- Goto 23
- FI:
- ZZ=CORRECT
- If NUMBER=0 Then Gosub COR
- If ZZ<>CORRECT Then Goto 4
- WANSWER=BB
- If NUMBER<>0 Then Gosub WOR
- 4 Return
- SE:
- ZZ=CORRECT
- If NUMBER=1 Then Gosub COR
- If ZZ<>CORRECT Then Goto 5
- If NUMBER=0 Then WANSWER=BB
- If NUMBER<>0 Then WANSWER=CC
- If NUMBER<>1 Then Gosub WOR
- 5 Return
- TH:
- ZZ=CORRECT
- If NUMBER=2 Then Gosub COR
- If ZZ<>CORRECT Then Goto 6
- If NUMBER<2 Then WANSWER=CC
- If NUMBER=3 Then WANSWER=DD
- If NUMBER<>2 Then Gosub WOR
- 6 Return
- FO:
- ZZ=CORRECT
- If NUMBER=3 Then Gosub COR
- If ZZ<>CORRECT Then Goto 7
- WANSWER=DD
- If NUMBER<>3 Then Gosub WOR
- 7 Return
- COR:
- Bob Off 9
- FIRD=False
- Screen Open 4,320,200,2,Lowres
- Colour 0,$0
- Colour 1,$F00
- Paper 0
- Pen 1
- Locate 0,12
- Centre "Correct!"
- Curs Off
- Wait 300
- Inc CORRECT
- Screen Close 4
- Cls 0
- Bob Draw
- Screen Swap
- Cls 0
- Bob Draw
- Screen Swap
- X=130
- Y=60
- Bob 1,X,Y,USEBOB
- Gosub NEWQSTN
- Timer=0
- Clear Key
- Return
- WOR:
- Bob Off 9
- FIRD=False
- Screen Open 4,320,200,2,Lowres
- Colour 0,$0
- Colour 1,$F00
- Locate 0,12
- Pen 1
- Paper 0
- CENTE["Wrong!"]
- ANS[KINDOFQUES$,FIRST,SECOND,ANSWER,WANSWER]
- Curs Off
- Wait 300
- Inc WRONG
- Screen Close 4
- Cls 0
- Bob Draw
- Screen Swap
- Cls 0
- Bob Draw
- Screen Swap
- X=130
- Y=60
- Bob 1,X,Y,USEBOB
- Gosub NEWQSTN
- Timer=0
- Clear Key
- Return
- NEXIT:
- Clear Key
- Copper Off
- Screen Open 0,320,200,32,Lowres
- Curs Off
- Cls 0
- Home
- Pen 31
- Paper 0
- Key Speed 10,2
- If CORRECT<>1
- CENTE["You got"+Str$(CORRECT)+" questions right."]
- Else
- CENTE["You got"+Str$(CORRECT)+" question right."]
- End If
- If WRONG<>1
- CENTE["You got"+Str$(WRONG)+" questions wrong."]
- Else
- CENTE["You got"+Str$(WRONG)+" question wrong."]
- End If
- CENTE["Press any key."]
- Copper On
- Hide On
- Clear Key
- Wait Key
- Proc XIT[SOUND$,CORRECT,WRONG]
- Procedure XIT[SOUND$,CORRECT,WRONG]
- Key Speed 10,2
- Copper Off
- Screen Close 0
- Screen Close 1
- Screen Close 2
- Screen Close 3
- Screen Open 0,320,200,2,Lowres
- Colour 0,0
- Colour 1,$FFF
- Curs Off
- Cls 0
- Paper 0
- Set Rainbow 0,0,64,"(1,1,1)","",""
- Rainbow 0,56,0,255
- Channel 1 To Rainbow 0
- Amal 1,"L: M -16,0,100 M 16,0,0 J L"
- Amal On
- Under On
- CENTE["Shareware Offer"]
- Under Off
- Print
- Print
- CENTE["REGISTER FOR A FREE EDUCATIONAL GAME!"]
- Print
- Print "Users who register Night Math Attack"
- Print "with the author and send the Shareware"
- Print "fee will receive a free educational"
- Print "game, Spell Chopper. The player selects"
- Cup
- Print "a spelling level from grades 1-6, and"
- Print "then uses the helicopter missile to"
- Print "choose the correctly spelled word in the"
- Cup
- Print "same way as Night Math Attack. To"
- Print "register and order send $5 U.S."
- Print "(includes air shipping) to:"
- Print
- Print " CHRIS EVANS"
- Print " 44 Shady Lane - RR7"
- Print " St. Thomas, ON"
- Print " Canada N5P 3T2"
- Print
- CENTE[" Voice : 519-633-2314 "]
- CENTE["Email : chris.evans@homebase.com"]
- Print
- Print "Apr. 95. Press any key to quit.";
- Copper On
- Hide On
- Clear Key
- Wait Key
- End
- End Proc
- Procedure CENTE[WHAT$]
- Centre WHAT$
- Print
- End Proc
- Procedure ANS[KINDOFQUES$,FIRST,SECOND,ANSWER,WANSWER]
- If KINDOFQUES$="A"
- Centre Str$(FIRST)+" + "+Str$(SECOND)+" = "+Str$(ANSWER)
- End If
- If KINDOFQUES$="S"
- Centre Str$(FIRST)+" - "+Str$(SECOND)+" = "+Str$(ANSWER)
- End If
- If KINDOFQUES$="M"
- Centre Str$(FIRST)+" X "+Str$(SECOND)+" = "+Str$(ANSWER)
- End If
- If KINDOFQUES$="D"
- Centre Str$(FIRST)+" "+Chr$(247)+" "+Str$(SECOND)+" = "+Str$(ANSWER)
- End If
- If D0PRINT
- LFIRST=Len(Str$(FIRST))
- PFIRST$=Str$(FIRST)+Space$(3-LFIRST)
- LSECOND=Len(Str$(SECOND))
- PSECOND$=Str$(SECOND)+Space$(3-LSECOND)
- LANSWER=Len(Str$(ANSWER))
- PANSWER$=Str$(ANSWER)+Space$(3-LANSWER)
- If WANSWER=300 : PWANSWER$="OOT" : End If
- If WANSWER<>300
- LWANSWER=Len(Str$(WANSWER))
- PWANSWER$=Str$(WANSWER)+Space$(3-LWANSWER)
- End If
- If KINDOFQUES$="A" : SIG$="+" : End If
- If KINDOFQUES$="S" : SIG$="-" : End If
- If KINDOFQUES$="M" : SIG$="X" : End If
- If KINDOFQUES$="D" : SIG$="/" : End If
- Lprint PFIRST$+SIG$+PSECOND$+"="+PANSWER$+" NOT "+PWANSWER$
- End If
- End Proc